package model;

import java.util.ArrayList;


public class Jefatura {
	private ArrayList<Sospechoso> sospechosos;
	private ArrayList<ObjetoRobado> comunes;
	private ArrayList<ObjetoRobado> valiosos;
	private ArrayList<ObjetoRobado> muyValiosos;
	private Caso caso;
	private int cantidadDeArrestos;
	
	public Jefatura(Caso unCaso, ArrayList<Sospechoso> sospechosos, ArrayList<ObjetoRobado> comunes, ArrayList<ObjetoRobado> valiosos, ArrayList<ObjetoRobado> muyValiosos ){
		this.caso = unCaso;
		this.sospechosos = sospechosos;
		this.comunes = comunes;
		this.valiosos = valiosos;
		this.muyValiosos = muyValiosos;
		this.cantidadDeArrestos = 0;
	}

	public ObjetoRobado establecerObjetoRobadoDelCaso(Novato novato){
		return comunes.get((int)(Math.random()*comunes.size()));
	}	
		
	public ObjetoRobado establecerObjetoRobadoDelCaso(Detective detective){
		return valiosos.get((int)(Math.random()*valiosos.size()));
	}
	
	public ObjetoRobado establecerObjetoRobadoDelCaso(Investigador investigador){
		return valiosos.get((int)(Math.random()*valiosos.size()));
	}
	
	public ObjetoRobado establecerObjetoRobadoDelCaso(Sargento sargento){
		return muyValiosos.get((int)(Math.random()*muyValiosos.size()));
	}
	

	public OrdenDeArresto emitirOrden(Descripcion posibleLadron) {
		ArrayList<Sospechoso> candidatos = new ArrayList<Sospechoso>();
		for(int sospechoso = 0; sospechoso < this.sospechosos.size(); sospechoso++){
			if (this.sospechosos.get(sospechoso).obtenerDescripcion().compararCon(posibleLadron)){
				candidatos.add(this.sospechosos.get(sospechoso));
			}
		}
		
		if((candidatos.size() > 1) || (candidatos.size() == 0)){ return null; }
		else{ return new OrdenDeArresto(candidatos.get(0).obtenerDescripcion().getNombre()); }
	}

	public boolean checkearOrden(OrdenDeArresto orden){
		return ((orden != null) ? true : false);
	}
	
	public boolean estaEntre(int x, int menor, int mayor) {
		  return ( (menor <= x) && (x <= mayor) );
	}
	
	public Rango asignarRango(Jugador jugador){
		int arrestos = this.cantidadDeArrestos;
		Rango rango = null;
		if (estaEntre(arrestos, 0, 4)){ rango = new Novato(); jugador.setRango(rango); }	
		
		else{ if (estaEntre(arrestos, 5, 9)){ rango = new Detective(); jugador.setRango(rango); }
			
			  else{ if (estaEntre(arrestos, 10, 19)){ rango = new Investigador(); jugador.setRango(rango); }
			  		
			  		else{ if (arrestos > 20){ rango = new Sargento(); jugador.setRango(rango); } }}
		}
		return rango;
	}

	public int obtenerCantidadDeArrestos(){
		return this.cantidadDeArrestos;
	}
	
	public void casoCerrado() {
		this.cantidadDeArrestos++;
	}
	
}
